home *** CD-ROM | disk | FTP | other *** search
- /*
- File: AVTransportController.c
-
- Contains: Application software to control AV transport mechanisms.
-
- Written by: Guillermo Gallegos
-
- Copyright: © 1996-1997 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <FW7> 3/18/97 ES Changed to not create new window if we get device added
- notification for a device we already have open.
- <FW6> 2/7/97 ES Added call to GetNextAVTClientEvent in event loop.
- <FW5> 11/14/96 GG Add Snapshot capture.
- <FW4> 9/23/96 GG Took out debug strings and took out useless routines
- <FW3> 9/20/96 GG Took out debug strings and took out useless routines
- <FW2> 9/16/96 GG Filled in contains field.
- <FW1> 9/16/96 GG first checked in.
-
- */
-
-
- #include <Types.h>
- #include <Memory.h>
- #include <Devices.h>
- #include <Resources.h>
- #include <QuickDraw.h>
- #include <Fonts.h>
- #include <Events.h>
- #include <AppleEvents.h>
- #include <EPPC.h>
- #include <Windows.h>
- #include <Menus.h>
- #include <Dialogs.h>
- #include <ToolUtils.h>
- #include <DiskInit.h>
- #include <AVTransport.h>
- #include <AVTransportController.h>
- //#include <CodeFragmentsPriv.h>
- #include <stdio.h>
- #define rWindow 128
- #define eCommandFailed 1
- #define rUserAlertContinue 130
- #define kErrStrings 130
- #define rUserAlert 129 /* error user alert */
-
-
- struct ezCamParameterStructure
- {
- UInt32 serialNumber; // serial number of the Sony camcorder.
- UInt32 selector; // a spare parameter when required.
- UInt32 functionPointer;// completion proc pointer.
- UInt32 result; // 4 byte result (filled in when applicable)
- };
- typedef struct ezCamParameterStructure
- ezCamPB,
- *ezCamPBPtr;
- char debugStr[256];
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Define global structure to hold all of the AVTController data.
- //
-
-
- AVTControllerAppDataPtr gpAVTControllerAppData = nil;
-
-
- struct OurWindowInfoRec {
- UInt32 serialNumber;
- Boolean stopped;
- Boolean timeToClose;
- };
-
- typedef struct OurWindowInfoRec OurWindowInfoRec;
- typedef OurWindowInfoRec *OurWindowInfoRecPtr;
- /*
- * These definitions are customized for the
- * PICT resource (photo) of the control panel.
- */
- Rect stopButton = { 97, 84, 140, 147};
- Rect rewButton = { 97, 153, 138, 211};
- Rect playButton = { 97, 213, 137, 276};
-
- Rect ffButton = { 97, 277, 135, 335};
- Rect pauseButton = { 97, 342, 133, 395};
-
- Rect frameBackButton = { 49, 128, 94, 179};
- Rect frameForwardButton = { 49, 183, 92, 238};
- Rect slowButton = { 49, 247, 90, 301};
-
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Internal procedure prototypes.
- //
-
- static void AVTControllerEventLoop (void);
-
- static OSErr HandleEvent (
- EventRecord *pEventRecord);
-
- static OSErr HandleMouseDownEvent (
- EventRecord *pEventRecord);
-
- static OSErr HandleKeyEvent (
- EventRecord *pEventRecord);
-
- static OSErr HandleOSEvent (
- EventRecord *pEventRecord);
-
- static OSErr HandleMenuCommand (
- long menuCommand);
-
- static OSErr HandleAppleMenuCommand (
- short menuItem);
-
- static OSErr HandleFileMenuCommand (
- short menuItem);
-
- static OSErr HandleExtraMenuCommand (
- short menuItem);
-
- static OSErr HandleSnapShotMenuCommand (
- short menuItem);
-
- static OSErr HandleCloseFileMenuCommand (void);
-
- static OSErr Rewind (void);
-
- static OSErr Stop (void);
-
- static OSErr Play (void);
-
- static OSErr FastForward (void);
-
- static OSErr Pause (void);
-
- static OSErr Slow (void);
-
- static OSErr NextFrame (void);
-
- static OSErr PreviousFrame (void);
-
- static OSErr HandleWindowCommand (
- WindowRef windowRef);
-
- static OSErr AVTControllerInitialize (void);
-
- static OSErr QuitApplication (void);
-
- static OSErr CreateController (
- AVTDriverID avtDriverID);
-
- static OSErr RemoveController (
- AVTDriverID avtDriverID);
-
- static OSErr CloseControllerWindow (
- WindowRef windowRef);
-
- static OSErr DrawController (
- WindowRef windowRef);
-
- static OSErr SetControllerState (
- WindowRef windowRef,
- Boolean stopped);
-
- static Boolean GetControllerState (
- WindowRef windowRef);
-
- static OSErr UpdateWindow (
- WindowRef windowRef);
-
- static OSErr UpdateMenus (void);
-
- static OSErr UpdateCursor (
- Point mousePosition,
- RgnHandle hCursorRgn);
-
- static Boolean IsControllerWindow (
- WindowRef windowRef);
-
- static void GetMousePosition (
- Point *pMousePosition);
-
- static pascal OSErr HandleOpenApplicationEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static pascal OSErr HandleOpenDocumentsEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static pascal OSErr HandlePrintDocumentsEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static pascal OSErr HandleQuitApplicationEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static pascal OSErr HandleDeviceAddedEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static pascal OSErr HandleDeviceRemovedEvent (
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon);
-
- static ControllerDataPtr FindControllerFromAVTDriver (
- AVTDriverID avtDriverID);
-
- static OSErr RemoveControllerFromList (
- ControllerDataPtr pControllerData);
-
- static OSErr PrepareWindowForUpdating (
- WindowRef windowRef,
- Boolean *pUpdateNeeded);
-
- static OSErr ReleaseWindowFromUpdating (
- WindowRef windowRef);
-
- static OSErr DoUpdate(WindowRef window);
- static OSErr DrawWindow(WindowPtr window);
-
- static OSErr DoNewWindow( UInt32 serialNumber );
- static OSErr ClickTheRightButton(EventRecord *event, WindowPtr window);
-
- static OSErr CaptureSnapShot (void);
-
- static OSErr PlaySnapShot (void);
-
- static OSErr StopSnapShot (void);
-
-
-
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Exported routines.
- //
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // AVTControllerMain
- //
- // This routine is the main entry point for the AVTransportController
- // application.
- //
-
- AVTControllerMain()
- {
- OSErr err = noErr;
-
- // Initialize the application.
- err = AVTControllerInitialize ();
-
- // Main application event loop.
- if (err == noErr)
- AVTControllerEventLoop ();
-
- // Dispose of global data record.
- if (gpAVTControllerAppData != nil)
- {
- DisposePtr ((Ptr) gpAVTControllerAppData);
- gpAVTControllerAppData = nil;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Internal routines.
- //
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // AVTControllerEventLoop
- //
- // This routine is the main event loop for the AVTransportController
- // application.
- //
-
- static void AVTControllerEventLoop(void)
- {
- RgnHandle hCursorRgn;
- Point mousePosition;
- EventRecord eventRecord;
- Boolean gotEvent;
- OSErr err = noErr;
-
- // Initialize cursor region.
- hCursorRgn = NewRgn ();
- if (hCursorRgn == nil)
- err = memFullErr;//zzz is this right?
-
- // Main event loop.
- while ((!gpAVTControllerAppData->quit) && (err == noErr))
- {
- // Update cursor to correct image.
- GetMousePosition (&mousePosition);
- err = UpdateCursor (mousePosition, hCursorRgn);
-
- // Get any AVTransport events.
- if (err == noErr)
- err = GetNextAVTClientEvent (gpAVTControllerAppData->avtClientID);
-
- // Wait for next event.
- if (err == noErr)
- gotEvent = WaitNextEvent (everyEvent, &eventRecord, 0, hCursorRgn);
-
- // Handle event if we got one.
- if (err == noErr)
- {
- if (gotEvent)
- {
- // Update cursor to correct image.
- err = UpdateCursor (eventRecord.where, hCursorRgn);
-
- // Handle the event.
- if (err == noErr)
- err = HandleEvent (&eventRecord);
- }
- }
- }
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleEvent
- //
- // This routine handles the given event.
- //
-
- static OSErr HandleEvent(
- EventRecord *pEventRecord)
- {
- Point point;
- OSErr err = noErr;
-
- // Main event dispatcher.
- switch (pEventRecord->what)
- {
- case mouseDown :
- err = HandleMouseDownEvent (pEventRecord);
- break;
-
- case keyDown :
- case autoKey :
- err = HandleKeyEvent (pEventRecord);
- break;
-
- case updateEvt :
- err = DoUpdate ((WindowRef) (pEventRecord->message));
- break;
-
- case diskEvt :
- if ((pEventRecord->message >> 16) != noErr)
- {
- SetPt (&point, kDILeft, kDITop);
- err = DIBadMount (point, pEventRecord->message);
- }
- break;
-
- case osEvt :
- err = HandleOSEvent (pEventRecord);
- break;
-
- case kHighLevelEvent :
- AEProcessAppleEvent (pEventRecord);
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleMouseDownEvent
- //
- // This routine handles mouse down events.
- //
-
- static OSErr HandleMouseDownEvent(
- EventRecord *pEventRecord)
- {
- WindowRef windowRef;
- short inPart;
- OSErr err = noErr;
-
- // Find out what part of application mouse is in.
- inPart = FindWindow (pEventRecord->where, &windowRef);
-
- // Dispatch off of inPart.
- switch (inPart)
- {
- case inMenuBar :
- UpdateMenus ();
- err = HandleMenuCommand (MenuSelect (pEventRecord->where));
- break;
-
- case inSysWindow :
- SystemClick (pEventRecord, windowRef);
- break;
-
- case inContent :
- if (windowRef == FrontWindow ())
- err = ClickTheRightButton(pEventRecord,windowRef);
- else
- SelectWindow (windowRef);
- break;
-
- case inDrag :
- DragWindow
- (windowRef,
- pEventRecord->where,
- &(gpAVTControllerAppData->qdGlobals.screenBits.bounds));
- break;
-
- case inGoAway :
- if (TrackGoAway (windowRef, pEventRecord->where))
- CloseControllerWindow (windowRef);
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleKeyEvent
- //
- // This routine handles key events.
- //
-
- static OSErr HandleKeyEvent(
- EventRecord *pEventRecord)
- {
- char key;
- OSErr err = noErr;
-
- // Read the key from the event record.
- key = pEventRecord->message & charCodeMask;
-
- // We're only interested in command key down events.
- if ((pEventRecord->modifiers & cmdKey) &&
- (pEventRecord->what == keyDown))
- {
- UpdateMenus ();
- err = HandleMenuCommand (MenuKey (key));
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleOSEvent
- //
- // This routine handles OS events.
- //
-
- static OSErr HandleOSEvent(
- EventRecord *pEventRecord)
- {
- UInt32 osEventType;
- OSErr err = noErr;
-
- // Get the OS event type.
- osEventType = pEventRecord->message >> 24;
-
- // Dispatch.
- switch (osEventType)
- {
- case suspendResumeMessage :
- if (pEventRecord->message & resumeFlag)
- gpAVTControllerAppData->inForeground = true;
- else
- gpAVTControllerAppData->inForeground = false;
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleMenuCommand
- //
- // This routine handles menu commands.
- //
-
- static OSErr HandleMenuCommand(
- long menuCommand)
- {
- short menuID,
- menuItem;
- OSErr err = noErr;
-
- // Get menu ID and item number from the menu command.
- menuID = menuCommand >> 16;
- menuItem = menuCommand & 0xFFFF;
-
- // Dispatch off of menu ID.
- switch (menuID)
- {
- case kAppleMenuID :
- err = HandleAppleMenuCommand (menuItem);
- break;
-
- case kFileMenuID :
- err = HandleFileMenuCommand (menuItem);
- break;
-
- case kEditMenuID :
- // Don't know if we'll ever get here.
- SystemEdit (menuItem - 1);
- break;
-
- case kExtraMenuID :
- err = HandleExtraMenuCommand (menuItem);
- break;
-
- case kSnapShotMenuID :
- err = HandleSnapShotMenuCommand (menuItem);
- break;
-
- default :
- break;
- }
-
- // Unhilite menu.
- HiliteMenu (0);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleAppleMenuCommand
- //
- // This routine handles apple menu commands.
- //
-
- static OSErr HandleAppleMenuCommand(
- short menuItem)
- {
- Str255 daName;
- OSErr err = noErr;
-
- // Apple menu dispatch.
- switch (menuItem)
- {
- case kAboutAppleMenuItem :
- Alert (kAboutAlertResourceID, nil);
- break;
-
- default :
- // All non-about items are DAs.
- GetMenuItemText (GetMenuHandle (kAppleMenuID), menuItem, daName);
- OpenDeskAcc (daName);
- break;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleFileMenuCommand
- //
- // This routine handles file menu commands.
- //
-
- static OSErr HandleFileMenuCommand(
- short menuItem)
- {
- OSErr err = noErr;
-
- // File menu dispatch.
- switch (menuItem)
- {
- case kCloseFileMenuItem :
- HandleCloseFileMenuCommand ();
- break;
-
- case kQuitFileMenuItem :
- QuitApplication ();
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleExtraMenuCommand
- //
- // This routine handles extra menu commands.
- //
-
- static OSErr HandleExtraMenuCommand(
- short menuItem)
- {
- OSErr err = noErr;
-
- // File menu dispatch.
- switch (menuItem)
- {
- case kRewindMenuItem :
- err = Rewind ();
- break;
-
- case kFastForwardMenuItem :
- err = FastForward ();
- break;
-
- case kPauseMenuItem :
- err = Pause ();
- break;
-
- case kSlowMenuItem :
- err = Slow ();
- break;
-
- case kNextFrameMenuItem :
- err = NextFrame ();
- break;
-
- case kPreviousFrameMenuItem :
- err = PreviousFrame ();
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleSnapShotMenuCommand
- //
- // This routine handles Camera menu commands.
- //
-
- static OSErr HandleSnapShotMenuCommand(
- short menuItem)
- {
- OSErr err = noErr;
-
- // File menu dispatch.
- switch (menuItem)
- {
- case kCaptureSnapShotMenuItem :
- err = CaptureSnapShot ();
- break;
-
- case kPlaySnapShotMenuItem :
- err = PlaySnapShot ();
- break;
-
- case kStopSnapShotMenuItem :
- err = StopSnapShot ();
- break;
-
- default :
- break;
- }
-
- return (err);
- }
-
-
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleCloseFileMenuCommand
- //
- // This routine handles the close command.
- //
-
- static OSErr HandleCloseFileMenuCommand(void)
- {
- WindowRef windowRef;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- err = CloseControllerWindow (windowRef);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Rewind
- //
- // This routine Rewinds camera.
- //
-
- static OSErr Rewind(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
- AVTWhatchaDoingParams avtWhatchaDoingParams;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Find Out what the thing is doing.
- avtWhatchaDoingParams.avtInterfaceParams.interfaceSelector = kAVTransportWhatchaDoing;
- err = CallAVTDriver
- (pControllerData->avtDriverID, (AVTInterfaceParams *) (&avtWhatchaDoingParams));
-
-
- // send Rewind command if not playing,FASTREviewing, slowplaying, or
- // pausing, playing backwards otherwise send FASTPlay
-
- if (!avtWhatchaDoingParams.what)
- avtInterfaceParams.interfaceSelector = kAVTransportRewind;
- else
- avtInterfaceParams.interfaceSelector = kAVTransportReview;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
-
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Stop
- //
- // This routine Stops camera.
- //
-
- static OSErr Stop(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // send Stop command
- // if (pControllerData->snapShotPlaying)
- // {
- avtInterfaceParams.interfaceSelector = kAVTransportStop;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
-
- // }
- }
-
- return (err);
- }
-
-
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Play
- //
- // This routine Plays camera.
- //
-
- static OSErr Play(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
-
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // send Play command
- avtInterfaceParams.interfaceSelector = kAVTransportPlay;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
-
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // FastForward
- //
- // This routine FastForwards camera.
- //
-
- static OSErr FastForward(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
- AVTWhatchaDoingParams avtWhatchaDoingParams;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Find Out what the thing is doing.
- avtWhatchaDoingParams.avtInterfaceParams.interfaceSelector = kAVTransportWhatchaDoing;
- err = CallAVTDriver
- (pControllerData->avtDriverID, (AVTInterfaceParams *) (&avtWhatchaDoingParams));
-
-
- // send FastForward command if not playing,FASTREviewing, slowplaying, or
- // pausing, playing backwards otherwise send FASTPlay
-
- if (!avtWhatchaDoingParams.what)
- avtInterfaceParams.interfaceSelector = kAVTransportFastForward;
- else
- avtInterfaceParams.interfaceSelector = kAVTransportFastPlay;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Pause
- //
- // This routine Pauses camera.
- //
-
- static OSErr Pause(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
- AVTWhatchaDoingParams avtWhatchaDoingParams;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Find Out what the thing is doing.
- avtWhatchaDoingParams.avtInterfaceParams.interfaceSelector = kAVTransportWhatchaDoing;
- err = CallAVTDriver
- (pControllerData->avtDriverID, (AVTInterfaceParams *) (&avtWhatchaDoingParams));
-
-
- // send Pause command if not playing,FASTREviewing, slowplaying, or
- // pausing, playing backwards otherwise send FASTPlay
-
- if (avtWhatchaDoingParams.what == kAVTransportPlay || avtWhatchaDoingParams.what == kAVTransportFastPlay ||
- avtWhatchaDoingParams.what == kAVTransportReview || avtWhatchaDoingParams.what == kAVTransportSlow)
- avtInterfaceParams.interfaceSelector = kAVTransportPause;
- else if (avtWhatchaDoingParams.what == kAVTransportPause)
- avtInterfaceParams.interfaceSelector = kAVTransportPlay;
- else
- return 0;
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Slow
- //
- // This routine Slows camera.
- //
-
- static OSErr Slow(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // send Slow command
- // if (pControllerData->snapShotPlaying)
- // {
- avtInterfaceParams.interfaceSelector = kAVTransportSlow;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // NextFrame
- //
- // This routine NextFrames camera.
- //
-
- static OSErr NextFrame(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // send NextFrame command
- avtInterfaceParams.interfaceSelector = kAVTransportNextFrame;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
-
- }
-
- return (err);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // PreviousFrame
- //
- // This routine PreviousFrames camera.
- //
-
- static OSErr PreviousFrame(void)
- {
- WindowRef windowRef;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // send PreviousFrame command
- avtInterfaceParams.interfaceSelector = kAVTransportPreviousFrame;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleWindowCommand
- //
- // This routine handles commands in the contents of the window.
- //
-
- static OSErr HandleWindowCommand(
- WindowRef windowRef)
- {
- OSErr err = noErr;
-
- // Toggle the traffic light state.
- err = SetControllerState (windowRef, !(GetControllerState (windowRef)));
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // AVTControllerInitialize
- //
- // This routine initializes the AVTransportController application.
- //
-
- static OSErr AVTControllerInitialize(void)
- {
- Handle hMenuBarResource;
- AVTDriverID *avtDriverIDList = nil;
- UInt32 numAVTDrivers,
- driverNum;
- Ptr dumpBuffer;
- OSErr err = noErr;
-
- // Create our global data record.
- gpAVTControllerAppData = (AVTControllerAppDataPtr)
- NewPtrClear (sizeof (AVTControllerAppData));
- if (gpAVTControllerAppData != nil)
- {
- gpAVTControllerAppData->avtClientID = kInvalidAVTClientID;
- gpAVTControllerAppData->inForeground = true;
- }
- else
- {
- err = memFullErr;
- }
-
- // Initialize a bunch of managers.
- if (err == noErr)
- {
- InitGraf ((Ptr) &(gpAVTControllerAppData->qdGlobals.thePort));
- InitFonts ();
- InitWindows ();
- InitMenus ();
- InitDialogs (nil);
- InitCursor ();
- }
-
- // Create our menu bar using the defs in our resources.
- if (err == noErr)
- {
- hMenuBarResource = GetNewMBar (kMenuBarResourceID);
- if (hMenuBarResource != nil)
- {
- SetMenuBar (hMenuBarResource);
- DisposeHandle (hMenuBarResource);
- AppendResMenu (GetMenuHandle (kAppleMenuID), 'DRVR');
- DrawMenuBar ();
- }
- else
- {
- err = memFullErr;//zzz what should it really be?
- }
- }
-
- // Create open application event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->openApplicationEventHandler =
- NewAEEventHandlerProc (HandleOpenApplicationEvent);
- if (gpAVTControllerAppData->openApplicationEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kCoreEventClass,
- kAEOpenApplication,
- gpAVTControllerAppData->openApplicationEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->openApplicationEventHandlerInstalled =
- true;
- }
- }
-
- // Create open documents event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->openDocumentsEventHandler =
- NewAEEventHandlerProc (HandleOpenDocumentsEvent);
- if (gpAVTControllerAppData->openDocumentsEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kCoreEventClass,
- kAEOpenDocuments,
- gpAVTControllerAppData->openDocumentsEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->openDocumentsEventHandlerInstalled =
- true;
- }
- }
-
- // Create print documents event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->printDocumentsEventHandler =
- NewAEEventHandlerProc (HandlePrintDocumentsEvent);
- if (gpAVTControllerAppData->printDocumentsEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kCoreEventClass,
- kAEPrintDocuments,
- gpAVTControllerAppData->printDocumentsEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->printDocumentsEventHandlerInstalled =
- true;
- }
- }
-
- // Create quit application event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->quitApplicationEventHandler =
- NewAEEventHandlerProc (HandleQuitApplicationEvent);
- if (gpAVTControllerAppData->quitApplicationEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kCoreEventClass,
- kAEQuitApplication,
- gpAVTControllerAppData->quitApplicationEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->quitApplicationEventHandlerInstalled =
- true;
- }
- }
-
- // Create device added event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->deviceAddedEventHandler =
- NewAEEventHandlerProc (HandleDeviceAddedEvent);
- if (gpAVTControllerAppData->deviceAddedEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kAEAVTransportEventClass,
- kAEAVTransportDeviceAdded,
- gpAVTControllerAppData->deviceAddedEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->deviceAddedEventHandlerInstalled =
- true;
- }
- }
-
- // Create device removed event handler.
- if (err == noErr)
- {
- gpAVTControllerAppData->deviceRemovedEventHandler =
- NewAEEventHandlerProc (HandleDeviceRemovedEvent);
- if (gpAVTControllerAppData->deviceRemovedEventHandler == nil)
- err = memFullErr;
- }
-
- // Install handler.
- if (err == noErr)
- {
- err = AEInstallEventHandler
- (kAEAVTransportEventClass,
- kAEAVTransportDeviceRemoved,
- gpAVTControllerAppData->deviceRemovedEventHandler,
- (long) gpAVTControllerAppData,
- false);
- if (err == noErr)
- {
- gpAVTControllerAppData->deviceRemovedEventHandlerInstalled =
- true;
- }
- }
-
- // Register with the AV transport control driver family.
- if (err == noErr)
- {
- err = RegisterAVTClientApplication
- (&(gpAVTControllerAppData->avtClientID),
- (UInt32) gpAVTControllerAppData);
- }
-
- // Get list of drivers.
- //zzz theoretically, new ones can be added while we're doing this.
- if (err == noErr)
- err = GetAVTDriverList (nil, 0, &numAVTDrivers);
-
- if ((err == noErr) && (numAVTDrivers > 0))
- {
- avtDriverIDList = (AVTDriverID *)
- NewPtr (numAVTDrivers * sizeof (AVTDriverID));
- if (avtDriverIDList != nil)
- {
- err = GetAVTDriverList
- (avtDriverIDList, numAVTDrivers, &numAVTDrivers);
- }
- else
- {
- err = memFullErr;
- }
- }
-
- // Create a stop light for each driver.
- for (driverNum = 0;
- ((driverNum < numAVTDrivers) && (err == noErr));
- driverNum++)
- {
- err = CreateController (avtDriverIDList[driverNum]);
- }
-
- // Allocate a buffer for video dumps.
- if (err == noErr)
- {
- dumpBuffer = NewPtr (kDumpBufferSize);
- if (dumpBuffer != nil)
- {
- gpAVTControllerAppData->dumpBuffer = dumpBuffer;
- gpAVTControllerAppData->dumpBufferSize = kDumpBufferSize;
- }
- else
- {
- err = memFullErr;
- }
- }
-
- // Clean up.
- if (avtDriverIDList != nil)
- DisposePtr ((Ptr) avtDriverIDList);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // QuitApplication
- //
- // This routine quits the application.
- //
-
- static OSErr QuitApplication(void)
- {
- ControllerDataPtr pControllerData,
- pNextControllerData;
- AVTClientID avtClientID;
- OSErr err = noErr;
-
- if (gpAVTControllerAppData != nil)
- {
- // Deallocate video dump buffer.
- if (gpAVTControllerAppData->dumpBuffer != nil)
- DisposePtr (gpAVTControllerAppData->dumpBuffer);
-
- // Remove all of the traffic lights.
- pControllerData = gpAVTControllerAppData->ControllerDataList;
- while (pControllerData != nil)
- {
- pNextControllerData = pControllerData->pNextControllerData;
-
- RemoveController (pControllerData->avtDriverID);
-
- pControllerData = pNextControllerData;
- }
-
- // Unregister with the AV transport control driver family.
- avtClientID = gpAVTControllerAppData->avtClientID;
- if (avtClientID != kInvalidAVTClientID)
- UnregisterAVTClientApplication (avtClientID);
-
- // Uninstall Apple event handlers.
- // Uninstall device removed event handler.
- if (gpAVTControllerAppData->deviceRemovedEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kAEAVTransportEventClass,
- kAEAVTransportDeviceRemoved,
- gpAVTControllerAppData->deviceRemovedEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->deviceRemovedEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->deviceRemovedEventHandler);
- }
-
- // Uninstall device added event handler.
- if (gpAVTControllerAppData->deviceAddedEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kAEAVTransportEventClass,
- kAEAVTransportDeviceAdded,
- gpAVTControllerAppData->deviceAddedEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->deviceAddedEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->deviceAddedEventHandler);
- }
-
- // Uninstall quit application event handler.
- if (gpAVTControllerAppData->quitApplicationEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kCoreEventClass,
- kAEQuitApplication,
- gpAVTControllerAppData->quitApplicationEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->quitApplicationEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->quitApplicationEventHandler);
- }
-
- // Uninstall print documents event handler.
- if (gpAVTControllerAppData->printDocumentsEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kCoreEventClass,
- kAEPrintDocuments,
- gpAVTControllerAppData->printDocumentsEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->printDocumentsEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->printDocumentsEventHandler);
- }
-
- // Uninstall open documents event handler.
- if (gpAVTControllerAppData->openDocumentsEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kCoreEventClass,
- kAEOpenDocuments,
- gpAVTControllerAppData->openDocumentsEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->openDocumentsEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->openDocumentsEventHandler);
- }
-
- // Uninstall open application event handler.
- if (gpAVTControllerAppData->openApplicationEventHandlerInstalled)
- {
- AERemoveEventHandler
- (kCoreEventClass,
- kAEOpenApplication,
- gpAVTControllerAppData->openApplicationEventHandler,
- false);
- }
-
- if (gpAVTControllerAppData->openApplicationEventHandler != nil)
- {
- DisposeRoutineDescriptor
- (gpAVTControllerAppData->openApplicationEventHandler);
- }
-
- // Set event loop to quit.
- gpAVTControllerAppData->quit = true;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // CreateController
- //
- // This routine creates a new traffic light window for the given driver.
- //
-
- static OSErr CreateController(
- AVTDriverID avtDriverID)
- {
- WindowRef ControllerWindowRef = kInvalidWindowRef;
- ControllerDataPtr pControllerData = nil;
- OSErr err = noErr;
-
- // Get a new stop light window.
- ControllerWindowRef =
- GetNewWindow (kControllerWindowResourceID, nil, (WindowRef) -1);
- if (ControllerWindowRef == kInvalidWindowRef)
- err = -1;//zzz not really correct.
-
- // Allocate traffic light data record.
- if (err == noErr)
- {
- pControllerData =
- (ControllerDataPtr) NewPtrClear (sizeof (ControllerData));
- if (pControllerData != nil)
- {
- pControllerData->ControllerWindowRef = ControllerWindowRef;
- pControllerData->avtDriverID = avtDriverID;
- pControllerData->stopped = true;
- }
- else
- {
- err = memFullErr;
- }
- }
-
- // Open connection to driver.
- if (err == noErr)
- err = OpenAVTDriver (avtDriverID);
-
- // Store traffic light data in window ref con.
- if (err == noErr)
- SetWRefCon (ControllerWindowRef, (long) pControllerData);
-
- // Add traffic light to list or clean up on error.
- if (err == noErr)
- {
- pControllerData->pNextControllerData =
- gpAVTControllerAppData->ControllerDataList;
- gpAVTControllerAppData->ControllerDataList =
- pControllerData;
- }
- else
- {
- if (pControllerData != nil)
- DisposePtr ((Ptr) pControllerData);
-
- if (ControllerWindowRef != kInvalidWindowRef)
- CloseWindow (ControllerWindowRef);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // RemoveController
- //
- // This routine removes the traffic light window for the given driver.
- //
-
- static OSErr RemoveController(
- AVTDriverID avtDriverID)
- {
- ControllerDataPtr pControllerData;
- Boolean found;
- OSErr err = noErr;
-
- // Find controller for given driver.
- pControllerData = FindControllerFromAVTDriver (avtDriverID);
- if (pControllerData != nil)
- found = true;
- else
- found = false;
-
- // Stop playing snap shot.
- if (found)
- {
- if (pControllerData->snapShotPlaying)
- StopSnapShot ();
- }
-
- // Close connection to driver.
- if (err == noErr)
- err = CloseAVTDriver (avtDriverID);
-
- // Close the controller window.
- if (found)
- CloseWindow (pControllerData->ControllerWindowRef);
-
- // Remove the controller data from our list.
- if (found)
- RemoveControllerFromList (pControllerData);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // CloseControllerWindow
- //
- // This routine closes the given traffic light window.
- //
-
- static OSErr CloseControllerWindow(
- WindowRef windowRef)
- {
- ControllerDataPtr pControllerData;
- OSErr err = noErr;
-
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Remove the traffic light.
- err = RemoveController (pControllerData->avtDriverID);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // DrawController
- //
- // This routine draws the given traffic light window.
- //
-
- static OSErr DrawController(
- WindowRef windowRef)
- {
- ControllerDataPtr pControllerData;
- GrafPtr pWindowPort;
- OSErr err = noErr;
-
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Get window's graf port.
- pWindowPort = (GrafPtr) GetWindowPort (windowRef);
-
- // Set port to the window's port.
- SetPortWindowPort (windowRef);
-
- // Clear window.
- EraseRect (&(pWindowPort->portRect));
-
- // Draw stop light.
- if (pControllerData->stopped)
- ForeColor (redColor);
- else
- ForeColor (blackColor);
- PaintOval (&(gpAVTControllerAppData->stopRect));
- ForeColor (blackColor);
- FrameOval (&(gpAVTControllerAppData->stopRect));
-
- // Draw go light.
- if (pControllerData->stopped)
- ForeColor (blackColor);
- else
- ForeColor (greenColor);
- PaintOval (&(gpAVTControllerAppData->goRect));
- ForeColor (blackColor);
- FrameOval (&(gpAVTControllerAppData->goRect));
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // SetControllerState
- //
- // This routine sets the state of the given traffic light window.
- //
-
- static OSErr SetControllerState(
- WindowRef windowRef,
- Boolean stopped)
- {
- ControllerDataPtr pControllerData;
- AVTPlayParams avtPlayParams;
- AVTStopParams avtStopParams;
- GrafPtr pWindowPort;
- OSErr err = noErr;
-
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Do something only if the state has changed.
- if (stopped != pControllerData->stopped)
- {
- if (stopped)
- {
- avtStopParams.avtInterfaceParams.interfaceSelector =
- kAVTransportStop;
- err = CallAVTDriver
- (pControllerData->avtDriverID,
- (AVTInterfaceParamsPtr) &avtStopParams);
- }
- else
- {
- avtPlayParams.avtInterfaceParams.interfaceSelector =
- kAVTransportPlay;
- err = CallAVTDriver
- (pControllerData->avtDriverID,
- (AVTInterfaceParamsPtr) &avtPlayParams);
- }
-
- // Set new state.
- if (err == noErr)
- pControllerData->stopped = stopped;
-
- // Force window update.
- if (err == noErr)
- {
- pWindowPort = (GrafPtr) GetWindowPort (windowRef);
- SetPortWindowPort (windowRef);
- InvalRect (&(pWindowPort->portRect));
- }
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // GetControllerState
- //
- // This routine gets the state of the given traffic light window.
- //
-
- static Boolean GetControllerState(
- WindowRef windowRef)
- {
- ControllerDataPtr pControllerData;
-
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- return (pControllerData->stopped);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // UpdateWindow
- //
- // This routine updates the given window.
- //
-
- static OSErr UpdateWindow(
- WindowRef windowRef)
- {
- Boolean updateNeeded,
- preparedUpdate;
- OSErr err = noErr;
-
- // Prepare window for updating.
- err = PrepareWindowForUpdating (windowRef, &updateNeeded);
- if (err == noErr)
- preparedUpdate = true;
- else
- preparedUpdate = false;
- // Put
- // Draw the window.
- if ((err == noErr) && (updateNeeded))
- err = DoUpdate (windowRef);
-
- // Release the window from updating.
- if (preparedUpdate)
- ReleaseWindowFromUpdating (windowRef);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // UpdateMenus
- //
- // This routine sets up the menus for the front most window.
- //
-
- static OSErr UpdateMenus(void)
- {
- WindowRef windowRef;
- MenuHandle hMenu;
- OSErr err = noErr;
-
- // Get reference to front most window.
- windowRef = FrontWindow ();
-
- // Get handle to file menu.
- hMenu = GetMenuHandle (kFileMenuID);
-
- // Close menu item should be enabled if there is a window open.
- if (windowRef != kInvalidWindowRef)
- EnableItem (hMenu, kCloseFileMenuItem);
- else
- DisableItem (hMenu, kCloseFileMenuItem);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // UpdateCursor
- //
- // This routine sets the cursor to the correct image for the given mouse
- // position.
- //
-
- static OSErr UpdateCursor(
- Point mousePosition,
- RgnHandle hCursorRgn)
- {
- WindowRef windowRef;
- GrafPtr pWindowPort;
- Rect windowPortRect;
- RgnHandle hArrowCursorRgn = nil,
- hPlusCursorRgn = nil;
- OSErr err = noErr;
-
- // Update if we're not in background.
- if (gpAVTControllerAppData->inForeground)
- {
- // Get reference to front most window.
- windowRef = FrontWindow ();
-
- // Initialize cursor regions.
- hArrowCursorRgn = NewRgn ();
- hPlusCursorRgn = NewRgn ();
-
- // Set plus region to front most window if it's a traffic light.
- if (IsControllerWindow (windowRef))
- {
- // Get window's port and port rect.
- pWindowPort = (GrafPtr) GetWindowPort (windowRef);
-
- // Set plus region to visible portion of traffic light window.
- SetPortWindowPort (windowRef);
- SetOrigin (-(pWindowPort->portBits.bounds.left),
- -(pWindowPort->portBits.bounds.top));
- windowPortRect = pWindowPort->portRect;
- RectRgn (hPlusCursorRgn, &windowPortRect);
- SectRgn (hPlusCursorRgn, pWindowPort->visRgn, hPlusCursorRgn);
- SetOrigin (0, 0);
- }
-
- // Set arrow region to everywhere except the other cursor regions.
- SetRectRgn (hArrowCursorRgn,
- kExtremeNeg,
- kExtremeNeg,
- kExtremePos,
- kExtremePos);
- DiffRgn (hArrowCursorRgn, hPlusCursorRgn, hArrowCursorRgn);
-
- // Change the cursor image and region.
- if (PtInRgn (mousePosition, hPlusCursorRgn))
- {
- SetCursor (*GetCursor (plusCursor));
- CopyRgn (hPlusCursorRgn, hCursorRgn);
- }
- else
- {
- SetCursor (&(gpAVTControllerAppData->qdGlobals.arrow));
- CopyRgn (hArrowCursorRgn, hCursorRgn);
- }
- }
-
- // Clean up.
- if (hArrowCursorRgn != nil)
- DisposeRgn (hArrowCursorRgn);
- if (hPlusCursorRgn != nil)
- DisposeRgn (hPlusCursorRgn);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // IsControllerWindow
- //
- // This routine returns true if the given window is a traffic light.
- //
-
- static Boolean IsControllerWindow(
- WindowRef windowRef)
- {
-
- // If the window is a user window, it's a traffic light.
- if (GetWindowKind (windowRef) == kApplicationWindowKind)
- return (true);
- else
- return (false);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // GetMousePosition
- //
- // This routine returns the current position of the mouse.
- //
-
- static void GetMousePosition(
- Point *pMousePosition)
- {
- EventRecord eventRecord;
-
- // Get mouse position from event manager.
- OSEventAvail (0, &eventRecord);
- *pMousePosition = eventRecord.where;
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleOpenApplicationEvent
- //
- // This routine handles open application events.
- //
-
- static pascal OSErr HandleOpenApplicationEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- OSErr err = noErr;
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleOpenDocumentsEvent
- //
- // This routine handles open documents events.
- //zzz should we return an error?
- //
-
- static pascal OSErr HandleOpenDocumentsEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- OSErr err = noErr;
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandlePrintDocumentsEvent
- //
- // This routine handles print documents events.
- //zzz should we return an error?
- //
-
- static pascal OSErr HandlePrintDocumentsEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- OSErr err = noErr;
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleQuitApplicationEvent
- //
- // This routine handles quit application events.
- //
-
- static pascal OSErr HandleQuitApplicationEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- OSErr err = noErr;
-
- // Quit the application.
- QuitApplication ();
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleDeviceAddedEvent
- //
- // This routine handles AV transport control device added events.
- //
-
- static pascal OSErr HandleDeviceAddedEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- AVTDriverID avtDriverID;
- DescType returnedType;
- Size returnedSize;
- Boolean inList;
- OSErr err = noErr;
-
- // Get driver ID from apple event.
- err = AEGetParamPtr (theAppleEvent,
- kAEAVTDriverIDKey,
- kAEAVTDriverIDType,
- &returnedType,
- &avtDriverID,
- sizeof (AVTDriverID),
- &returnedSize);
-
- // Check if avt driver is in our list. This will happen if device was
- // connected, opened, disconnected, and reconnected without being closed.
- // If it's in our list, do not create a new controller.
- if (err == noErr)
- {
- if (FindControllerFromAVTDriver (avtDriverID))
- inList = true;
- else
- inList = false;
- }
-
- // Create controller for added device.
- if ((err == noErr) && (!inList))
- err = CreateController (avtDriverID);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // HandleDeviceRemovedEvent
- //
- // This routine handles AV transport control device removed events.
- //
-
- static pascal OSErr HandleDeviceRemovedEvent(
- AppleEvent *theAppleEvent,
- AppleEvent *reply,
- long handlerRefcon)
- {
- AVTDriverID avtDriverID;
- DescType returnedType;
- Size returnedSize;
- OSErr err = noErr;
-
- // Get driver ID from apple event.
- err = AEGetParamPtr (theAppleEvent,
- kAEAVTDriverIDKey,
- kAEAVTDriverIDType,
- &returnedType,
- &avtDriverID,
- sizeof (AVTDriverID),
- &returnedSize);
-
- // Create traffic light for removed device.
- if (err == noErr)
- err = RemoveController (avtDriverID);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // FindControllerFromAVTDriver
- //
- // This routine searches for the controller corresponding to the given
- // AVT driver ID.
- //
-
- static ControllerDataPtr FindControllerFromAVTDriver(
- AVTDriverID avtDriverID)
- {
- ControllerDataPtr pControllerData,
- pPrevControllerData;
- Boolean found;
- OSErr err = noErr;
-
- // Find controller for given driver.
- pControllerData = gpAVTControllerAppData->ControllerDataList;
- pPrevControllerData = nil;
- found = false;
- while ((pControllerData != nil) && (!found))
- {
- if (pControllerData->avtDriverID == avtDriverID)
- {
- found = true;
- }
- else
- {
- pPrevControllerData = pControllerData;
- pControllerData = pControllerData->pNextControllerData;
- }
- }
-
- return (pControllerData);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // RemoveControllerFromList
- //
- // This routine removes the given controller data record from our list.
- //
-
- static OSErr RemoveControllerFromList(
- ControllerDataPtr pControllerData)
- {
- ControllerDataPtr pSearchControllerData,
- pPrevControllerData;
- Boolean found;
- OSErr err = noErr;
-
- // Find previous controller data record.
- pSearchControllerData = gpAVTControllerAppData->ControllerDataList;
- pPrevControllerData = nil;
- found = false;
- while ((pSearchControllerData != nil) && (!found))
- {
- if (pSearchControllerData == pControllerData)
- {
- found = true;
- }
- else
- {
- pPrevControllerData = pSearchControllerData;
- pSearchControllerData = pSearchControllerData->pNextControllerData;
- }
- }
-
- // Remove the controller data from our list.
- if (found)
- {
- if (pPrevControllerData != nil)
- {
- pPrevControllerData->pNextControllerData =
- pControllerData->pNextControllerData;
- }
- else
- {
- gpAVTControllerAppData->ControllerDataList =
- pControllerData->pNextControllerData;
- }
-
- DisposePtr ((Ptr) pControllerData);
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Window managing routines.
- //
- // Code that needs to use window records goes here.
- //
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // PrepareWindowForUpdating
- //
- // This routine prepares the given window for updating.
- //
-
- static OSErr PrepareWindowForUpdating(
- WindowRef windowRef,
- Boolean *pUpdateNeeded)
- {
- GrafPtr pWindowPort;
- OSErr err = noErr;
-
- // Get window's port.
- pWindowPort = (GrafPtr) GetWindowPort (windowRef);
-
- // Call window manager to begin update.
- BeginUpdate (windowRef);
-
- // Check if window needs updating.
- if (pUpdateNeeded != nil)
- {
- if (EmptyRgn (pWindowPort->visRgn))
- *pUpdateNeeded = false;
- else
- *pUpdateNeeded = true;
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // ReleaseWindowFromUpdating
- //
- // This routine releases the given window from updating.
- //
-
- static OSErr ReleaseWindowFromUpdating(
- WindowRef windowRef)
- {
- OSErr err = noErr;
-
- // Call window manager to end update.
- EndUpdate (windowRef);
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////////
- //
- // DoNewWIndow
- //
- // This routine creates the picture.
- //
- //
- // THe Routines following this comment are from Sony's stuff with many modifications.
- //
- /*======================== FUNCTION =======================*/
- /* MemClear. Two-bit routine to clear 'bytes' bytes starting at *'ptr' */
- void
- MemClear(register void *ptr, register unsigned long bytes)
- {
- char *cp = (char *) ptr;
- do
- {
- // original *((char *) ptr)++ = (char) 0x00;
- *cp++ = (char) 0x00;
- }
- while (--bytes != 0);
- }
- void
- AlertUserContinue(short error)
- {
- return;
- /*
- Str255 message;
-
- SetCursor(&qd.arrow);
- GetIndString(message, kErrStrings, error);
- ParamText((ConstStr255Param) message, (ConstStr255Param) "", (ConstStr255Param) "", (ConstStr255Param) "");
- (void) Alert(rUserAlert, nil);
- */
- }
-
-
-
- static OSErr DoNewWindow( UInt32 serialNumber )
- {
- WindowPtr window, tempWindow; // temp window so we can dump it if NewWindow fails
- OurWindowInfoRecPtr windowInfoPtr;
- char nameBuffer[256];
-
- if ( (window = tempWindow = (WindowPtr) NewPtr(sizeof(WindowRecord))) == nil ) // get window storage
- goto ErrorHandler2;
-
- if ( (windowInfoPtr = (OurWindowInfoRecPtr) NewPtr(sizeof(OurWindowInfoRec))) == nil ) // get refCon storage
- goto ErrorHandler2;
-
- MemClear(windowInfoPtr, sizeof(OurWindowInfoRec)); // Lazy way to init the fields
-
- if ((window = GetNewWindow(rWindow, (Ptr) window, (WindowPtr) -1)) == nil) // get the window
- goto ErrorHandler1;
-
- ((WindowPeek) window)->refCon = (long) windowInfoPtr; // assign it to the window
-
- ((OurWindowInfoRecPtr) (((WindowPeek) window)->refCon))->serialNumber = serialNumber; // store our driver ID
- ((OurWindowInfoRecPtr) (((WindowPeek) window)->refCon))->stopped = true; // start off stopped
-
- // name the window after the camera being controlled
- sprintf (nameBuffer,"SONY Digital Handycam Serial No. %ld", serialNumber);
- SetWTitle(window, (ConstStr255Param) c2pstr (nameBuffer));
-
- return 0;
-
- ErrorHandler1:
- CloseWindow(tempWindow);
- ErrorHandler2:
- AlertUserContinue(eCommandFailed);
-
- return 0;
- }
-
- Boolean IsAppWindow(WindowPtr window)
- {
- short windowKind;
-
- if ( window == nil )
- return false;
- else {
- windowKind = ((WindowPeek) window)->windowKind;
- return (windowKind == userKind);
- }
- } /*IsAppWindow*/
-
- static OSErr DrawWindow(WindowPtr window)
- {
- PicHandle myPic;
-
- /*
- * start by erasing
- */
- SetPort(window);
- EraseRect(&window->portRect); /* clear out any garbage that may linger */
-
- myPic = GetPicture(177);
-
- if(myPic!=nil)
- {
- DrawPicture(myPic,&window->portRect);
- }
- else
- {
- DebugStr((ConstStr255Param)"\pmyPic unable to find resource");
- }
- return 0;
- }
- static OSErr DoUpdate(WindowRef window)
- {
- if ( IsAppWindow(window) ) {
- BeginUpdate(window); /* this sets up the visRgn */
- if ( ! EmptyRgn(window->visRgn) ) /* draw if updating needs to be done */
- DrawWindow(window);
- EndUpdate(window);
- }
- return 0;
- } /*DoUpdate*/
-
-
-
- /*======================== FUNCTION =======================*/
- static OSErr ClickTheRightButton(EventRecord *event, WindowPtr window)
- {
- Point clickDownPoint;
- ezCamPB ezpb;
-
-
- // prepare the parameter block for easy use.
- ezpb.serialNumber = ((OurWindowInfoRecPtr) (((WindowPeek) window)->refCon))->serialNumber;
- ezpb.selector = 0;
-
- /*
- * Get the starting point and convert it to local coordinates.
- */
- BlockMove( (Ptr) &event->where , (Ptr) &clickDownPoint, sizeof(Point)); // copy point
- GlobalToLocal(&clickDownPoint);
-
-
- if(PtInRect(clickDownPoint, &stopButton))
- return( Stop() ) ;
-
- if(PtInRect(clickDownPoint, &rewButton))
- {
- return( Rewind() );
- }
-
- if(PtInRect(clickDownPoint, &playButton))
- return( Play() );
-
- if(PtInRect(clickDownPoint, &ffButton))
- {
- return( FastForward() );
- }
-
- if(PtInRect(clickDownPoint, &pauseButton))
- {
- return( Pause() );
- }
-
- if(PtInRect(clickDownPoint, &frameBackButton))
- return( PreviousFrame() );
-
- if(PtInRect(clickDownPoint, &frameForwardButton))
- return( NextFrame() );
-
- if(PtInRect(clickDownPoint, &slowButton))
- {
- return( Slow() );
- }
-
- return 0;
- }
-
-
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // CaptureSnapShot
- //
- // This routine captures a snap shot picture from the camera.
- //
-
- static OSErr CaptureSnapShot(void)
- {
- WindowRef windowRef;
- MenuHandle hMenu;
- ControllerDataPtr pControllerData;
- AVTDumpParams avtDumpParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Stop playing snap shot if it's playing.
- if (pControllerData->snapShotPlaying)
- err = StopSnapShot ();
-
- // Capture a snap shot.
- if (err == noErr)
- {
- avtDumpParams.avtInterfaceParams.interfaceSelector =
- kAVTransportDump;
- avtDumpParams.dumpBuffer =
- gpAVTControllerAppData->dumpBuffer;
- avtDumpParams.dumpBufferSize =
- gpAVTControllerAppData->dumpBufferSize;
- avtDumpParams.dumpBufferOffset = 0;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID,
- (AVTInterfaceParamsPtr) &avtDumpParams);
- }
-
- // Enable playing snap shot if we hadn't already gotten one.
- if ((err == noErr) && (!(gpAVTControllerAppData->gotSnapShot)))
- {
- hMenu = GetMenuHandle (kSnapShotMenuID);
-
- if (hMenu != nil)
- {
- EnableItem (hMenu, kPlaySnapShotMenuItem);
- gpAVTControllerAppData->gotSnapShot = true;
- }
- }
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // PlaySnapShot
- //
- // This routine plays a snap shot picture to the camera.
- //
-
- static OSErr PlaySnapShot(void)
- {
- WindowRef windowRef;
- MenuHandle hMenu;
- ControllerDataPtr pControllerData;
- AVTPlaySnapShotParams avtPlaySnapShotParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Play a snap shot.
- if ((!(pControllerData->snapShotPlaying)) &&
- (gpAVTControllerAppData->gotSnapShot))
- {
- avtPlaySnapShotParams.avtInterfaceParams.interfaceSelector =
- kAVTransportPlaySnapShot;
- avtPlaySnapShotParams.snapShotBuffer =
- gpAVTControllerAppData->dumpBuffer;
- avtPlaySnapShotParams.snapShotBufferSize =
- gpAVTControllerAppData->dumpBufferSize;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID,
- (AVTInterfaceParamsPtr) &avtPlaySnapShotParams);
-
- // Enable stopping snap shot.
- if (err == noErr)
- {
- hMenu = GetMenuHandle (kSnapShotMenuID);
- if (hMenu != nil)
- {
- DisableItem (hMenu, kPlaySnapShotMenuItem);
- EnableItem (hMenu, kStopSnapShotMenuItem);
- }
-
- pControllerData->snapShotPlaying = true;
- }
- }
- }
-
- return (err);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // StopSnapShot
- //
- // This routine stops playing a snap shot picture to the camera.
- //
-
- static OSErr StopSnapShot(void)
- {
- WindowRef windowRef;
- MenuHandle hMenu;
- ControllerDataPtr pControllerData;
- AVTInterfaceParams avtInterfaceParams;
- OSErr err = noErr;
-
- // Get reference to front most window and close.
- windowRef = FrontWindow ();
- if (windowRef != kInvalidWindowRef)
- {
- // Get traffic light data.
- pControllerData = (ControllerDataPtr) GetWRefCon (windowRef);
-
- // Play a snap shot.
- if (pControllerData->snapShotPlaying)
- {
- avtInterfaceParams.interfaceSelector = kAVTransportStopSnapShot;
-
- err = CallAVTDriver
- (pControllerData->avtDriverID, &avtInterfaceParams);
-
- // Enable playing snap shot.
- if (err == noErr)
- {
- hMenu = GetMenuHandle (kSnapShotMenuID);
- if (hMenu != nil)
- {
- DisableItem (hMenu, kStopSnapShotMenuItem);
- EnableItem (hMenu, kPlaySnapShotMenuItem);
- }
-
- pControllerData->snapShotPlaying = false;
- }
- }
- }
-
- return (err);
- }
-